@@ -5,7 +5,7 @@ from __future__ import division |
||
5 | 5 |
import json |
6 | 6 |
|
7 | 7 |
from django.conf import settings |
8 |
-from django.db.models import Q |
|
8 |
+from django.db.models import Max, Q |
|
9 | 9 |
from django_logit import logit |
10 | 10 |
from django_query import get_query_value |
11 | 11 |
from django_response import response |
@@ -16,7 +16,6 @@ from equipment.models import (IsolationPointInfo, IsolationPointUserInfo, Thermo |
||
16 | 16 |
ThermometerMeasureInfo, ThermometerMeasureLogInfo) |
17 | 17 |
from utils.error.errno_utils import IsolationPointStatusCode, ThermometerEquipmentStatusCode |
18 | 18 |
from utils.redis.rscreen import get_screen_info, set_screen_info |
19 |
-from utils.redis.rtemperature import get_old_temperature, set_old_temperature |
|
20 | 19 |
|
21 | 20 |
|
22 | 21 |
@logit |
@@ -209,36 +208,43 @@ def get_screen_data(point=None, point_id=None): |
||
209 | 208 |
return {} |
210 | 209 |
|
211 | 210 |
eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point.point_id, active_status=ThermometerEquipmentInfo.ONLINE, status=True) |
212 |
- macids = eqpts.values_list('macid', flat=True) |
|
213 |
- |
|
214 |
- logs = ThermometerMeasureInfo.objects.filter( |
|
215 |
- point_id=point.point_id, |
|
216 |
- point_measure_ymd=tc.local_string(format='%Y-%m-%d'), |
|
217 |
- point_measure_window=point.previous_measure_window, |
|
218 |
- macid__in=macids, |
|
219 |
- status=True, |
|
220 |
- ).values('macid', 'temperature', 'updated_at') |
|
221 |
- temperature_logs = {log.get('macid'): log.get('temperature') for log in logs} |
|
222 |
- time_logs = {log.get('macid'): tc.local_string(utc_dt=log.get('updated_at'), format='%m-%d %H:%M') for log in logs} |
|
211 |
+ # macids = eqpts.values_list('macid', flat=True) |
|
212 |
+ # |
|
213 |
+ # logs = ThermometerMeasureInfo.objects.filter( |
|
214 |
+ # point_id=point.point_id, |
|
215 |
+ # point_measure_ymd=tc.local_string(format='%Y-%m-%d'), |
|
216 |
+ # point_measure_window=point.previous_measure_window, |
|
217 |
+ # macid__in=macids, |
|
218 |
+ # status=True, |
|
219 |
+ # ).values('macid', 'temperature', 'updated_at') |
|
220 |
+ # temperature_logs = {log.get('macid'): log.get('temperature') for log in logs} |
|
221 |
+ # time_logs = {log.get('macid'): tc.local_string(utc_dt=log.get('updated_at'), format='%m-%d %H:%M') for log in logs} |
|
223 | 222 |
|
224 | 223 |
ipuis = IsolationPointUserInfo.objects.filter(point_id=point.point_id, status=True) |
225 | 224 |
ipuis = [ipui.data for ipui in ipuis] |
225 |
+ |
|
226 |
+ total_active_eqpt_num = eqpts.count() |
|
227 |
+ # has_upload_temperature_num = len(temperature_logs) |
|
228 |
+ # fever_num = len([1 for temperature in temperature_logs.values() if temperature > settings.FEVER_TEMPERATURE]) |
|
229 |
+ has_upload_temperature_num = len([1 for ipui in ipuis if ipui.get('temperature_has_upload', '') == '已上报']) |
|
230 |
+ fever_num = len([1 for ipui in ipuis if ipui.get('temperature', 0) > settings.FEVER_TEMPERATURE]) |
|
231 |
+ |
|
226 | 232 |
# ipuis_fields = {info.get('pk'): info.get('fields') for info in ipuis} |
227 | 233 |
# ipuis_observed_days = {info.get('pk'): info.get('observed_days') for info in ipuis} |
228 | 234 |
ipuis = {ipui.get('pk'): { |
229 | 235 |
'fields': ipui.get('fields'), |
230 | 236 |
'observed_days': ipui.get('observed_days'), |
237 |
+ 'temperature_has_upload': ipui.get('temperature_has_upload'), |
|
238 |
+ 'temperature': ipui.get('temperature'), |
|
231 | 239 |
'last_submit_at': ipui.get('last_submit_at'), |
232 | 240 |
'remark': ipui.get('remark'), |
233 | 241 |
} for ipui in ipuis} |
234 | 242 |
|
235 |
- total_active_eqpt_num = eqpts.count() |
|
236 |
- has_upload_temperature_num = len(temperature_logs) |
|
237 |
- fever_num = len([1 for temperature in temperature_logs.values() if temperature > settings.FEVER_TEMPERATURE]) |
|
238 |
- |
|
239 | 243 |
eqpts = [{**eqpt.screen_data, **{ |
240 |
- 'has_upload': eqpt.macid in temperature_logs, |
|
241 |
- 'temperature': temperature_logs.get(eqpt.macid, 0), |
|
244 |
+ # 'has_upload': eqpt.macid in temperature_logs, |
|
245 |
+ # 'temperature': temperature_logs.get(eqpt.macid, 0), |
|
246 |
+ 'has_upload': ipuis.get(eqpt.ipui_pk, {}).get('temperature_has_upload', 0), |
|
247 |
+ 'temperature': ipuis.get(eqpt.ipui_pk, {}).get('temperature', 0), |
|
242 | 248 |
'observed_days': ipuis.get(eqpt.ipui_pk, {}).get('observed_days', 0), |
243 | 249 |
'last_submit_at': ipuis.get(eqpt.ipui_pk, {}).get('last_submit_at', ''), |
244 | 250 |
'remark': ipuis.get(eqpt.ipui_pk, {}).get('remark', ''), |
@@ -251,25 +257,18 @@ def get_screen_data(point=None, point_id=None): |
||
251 | 257 |
'content': eqpt.get('remark'), |
252 | 258 |
} for eqpt in eqpts if eqpt.get('remark')] |
253 | 259 |
|
254 |
- # var name: String = "" |
|
255 |
- # var room: String = "" |
|
256 |
- # var phone: String = "" |
|
257 |
- # var sex: String = "" |
|
258 |
- # var age: String = "" |
|
259 |
- # var temperature: String = "" |
|
260 |
- # var status: String = "" |
|
261 |
- # var remind: String = "" |
|
262 |
- # var last_report_time: String = "" |
|
263 |
- # var observed_days: String = "" |
|
264 | 260 |
eqpts = [{ |
265 | 261 |
'name': eqpt.get('name', ''), |
266 | 262 |
'room': eqpt.get('room', ''), |
267 | 263 |
'phone': eqpt.get('phone', ''), |
268 | 264 |
'sex': eqpt.get('sex', ''), |
269 | 265 |
'age': eqpt.get('age', ''), |
270 |
- 'status': '已上报' if eqpt.get('temperature') else '未上报', |
|
271 |
- 'last_report_time': time_logs.get(eqpt.get('macid', ''), '') if eqpt.get('temperature') else eqpt.get('last_submit_at', ''), |
|
272 |
- 'temperature': eqpt.get('temperature', '') or get_old_temperature(eqpt.get('point_id', ''), eqpt.get('macid', '')), |
|
266 |
+ 'status': eqpt.get('has_upload'), |
|
267 |
+ # 'status': '已上报' if eqpt.get('temperature') else '未上报', |
|
268 |
+ 'last_report_time': eqpt.get('last_submit_at', ''), |
|
269 |
+ # 'last_report_time': time_logs.get(eqpt.get('macid', ''), '') if eqpt.get('temperature') else eqpt.get('last_submit_at', ''), |
|
270 |
+ 'temperature': eqpt.get('temperature', 0), |
|
271 |
+ # 'temperature': eqpt.get('temperature', '') or get_old_temperature(eqpt.get('point_id', ''), eqpt.get('macid', '')), |
|
273 | 272 |
'observed_days': eqpt.get('observed_days', 0), |
274 | 273 |
} for eqpt in eqpts] |
275 | 274 |
|
@@ -400,32 +399,44 @@ def mqtt_upload_temperature(payload): |
||
400 | 399 |
except IsolationPointInfo.DoesNotExist: |
401 | 400 |
return |
402 | 401 |
|
403 |
- point_measure_ymd = tc.local_string(format='%Y-%m-%d') |
|
402 |
+ # point_measure_ymd = tc.local_string(format='%Y-%m-%d') |
|
404 | 403 |
|
405 |
- point_measure_window = point.current_measure_window |
|
406 |
- eqpt.last_submit_at = tc.utc_datetime() |
|
407 |
- eqpt.save() |
|
404 |
+ # point_measure_window = point.current_measure_window |
|
405 |
+ # eqpt.last_submit_at = tc.utc_datetime() |
|
406 |
+ # eqpt.save() |
|
408 | 407 |
|
409 | 408 |
ThermometerMeasureLogInfo.objects.create(point_id=eqpt.point_id, macid=macid, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MQTT, upload_temperature_info=payload) |
410 | 409 |
|
411 |
- if point_measure_window: |
|
412 |
- measure_info, _ = ThermometerMeasureInfo.objects.get_or_create(point_id=eqpt.point_id, point_measure_ymd=point_measure_ymd, point_measure_window=point_measure_window, macid=macid, defaults={ |
|
413 |
- 'temperature': temperature, |
|
414 |
- }) |
|
415 |
- if temperature > measure_info.temperature: |
|
416 |
- measure_info.temperature = temperature |
|
417 |
- measure_info.save() |
|
418 |
- |
|
419 |
- set_old_temperature(eqpt.point_id, macid, temperature) |
|
410 |
+ # if point_measure_window: |
|
411 |
+ # measure_info, _ = ThermometerMeasureInfo.objects.get_or_create(point_id=eqpt.point_id, point_measure_ymd=point_measure_ymd, point_measure_window=point_measure_window, macid=macid, defaults={ |
|
412 |
+ # 'temperature': temperature, |
|
413 |
+ # }) |
|
414 |
+ # if temperature > measure_info.temperature: |
|
415 |
+ # measure_info.temperature = temperature |
|
416 |
+ # measure_info.save() |
|
417 |
+ # |
|
418 |
+ # set_old_temperature(eqpt.point_id, macid, temperature) |
|
419 |
+ # |
|
420 |
+ # try: |
|
421 |
+ # ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk) |
|
422 |
+ # except IsolationPointUserInfo.DoesNotExist: |
|
423 |
+ # ipui = None |
|
424 |
+ # if ipui: |
|
425 |
+ # ipui.observed_ymds = list(set(ipui.observed_ymds + [point_measure_ymd])) |
|
426 |
+ # ipui.observed_days = len(ipui.observed_ymds) |
|
427 |
+ # ipui.last_submit_at = tc.utc_datetime() |
|
428 |
+ # ipui.save() |
|
420 | 429 |
|
421 |
- try: |
|
422 |
- ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk) |
|
423 |
- except IsolationPointUserInfo.DoesNotExist: |
|
424 |
- ipui = None |
|
425 |
- if ipui: |
|
426 |
- ipui.observed_ymds = list(set(ipui.observed_ymds + [point_measure_ymd])) |
|
427 |
- ipui.observed_days = len(ipui.observed_ymds) |
|
428 |
- ipui.last_submit_at = tc.utc_datetime() |
|
429 |
- ipui.save() |
|
430 |
+ try: |
|
431 |
+ ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk) |
|
432 |
+ except IsolationPointUserInfo.DoesNotExist: |
|
433 |
+ ipui = None |
|
434 |
+ if ipui: |
|
435 |
+ temperature__max = ThermometerMeasureLogInfo.objects.filter(point_id=eqpt.point_id, macid=macid).aggregate(Max('temperature')).get('temperature__max') or 0 |
|
436 |
+ ipui.observed_ymds = list(set(ipui.observed_ymds + [tc.local_string(format='%Y-%m-%d')])) |
|
437 |
+ ipui.observed_days = len(ipui.observed_ymds) |
|
438 |
+ ipui.temperature = temperature__max |
|
439 |
+ ipui.last_submit_at = tc.utc_datetime() |
|
440 |
+ ipui.save() |
|
430 | 441 |
|
431 | 442 |
set_screen_info(point.point_id, get_screen_data(point)) |
@@ -16,7 +16,7 @@ class IsolationPointInfoAdmin(admin.ModelAdmin): |
||
16 | 16 |
|
17 | 17 |
|
18 | 18 |
class IsolationPointUserInfoAdmin(admin.ModelAdmin): |
19 |
- list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'last_submit_at', 'leave_at', 'status', 'updated_at', 'created_at') |
|
19 |
+ list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'temperature', 'last_submit_at', 'leave_at', 'status', 'updated_at', 'created_at') |
|
20 | 20 |
|
21 | 21 |
|
22 | 22 |
class ThermometerEquipmentInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin): |
@@ -0,0 +1,18 @@ |
||
1 |
+# Generated by Django 3.2.6 on 2021-08-17 09:56 |
|
2 |
+ |
|
3 |
+from django.db import migrations, models |
|
4 |
+ |
|
5 |
+ |
|
6 |
+class Migration(migrations.Migration): |
|
7 |
+ |
|
8 |
+ dependencies = [ |
|
9 |
+ ('equipment', '0012_auto_20210817_1727'), |
|
10 |
+ ] |
|
11 |
+ |
|
12 |
+ operations = [ |
|
13 |
+ migrations.AddField( |
|
14 |
+ model_name='isolationpointuserinfo', |
|
15 |
+ name='temperature', |
|
16 |
+ field=models.FloatField(default=0, help_text='用户体温', verbose_name='temperature'), |
|
17 |
+ ), |
|
18 |
+ ] |
@@ -145,6 +145,7 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
145 | 145 |
observed_ymds = JSONField(_('observed_ymds'), default=[], blank=True, null=True, help_text='已测温日期') |
146 | 146 |
observed_days = models.IntegerField(_('observed_days'), default=0, help_text='已测温天数') |
147 | 147 |
|
148 |
+ temperature = models.FloatField(_('temperature'), default=0, help_text='用户体温') |
|
148 | 149 |
last_submit_at = models.DateTimeField(_('last_submit_at'), blank=True, null=True, help_text='上一次上报时间') |
149 | 150 |
leave_at = models.DateTimeField(_('leave_at'), blank=True, null=True, help_text='离开时间') |
150 | 151 |
|
@@ -163,6 +164,14 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
163 | 164 |
return self.pk |
164 | 165 |
|
165 | 166 |
@property |
167 |
+ def temperature_has_upload(self): |
|
168 |
+ if not self.last_submit_at: |
|
169 |
+ return '未上报' |
|
170 |
+ if self.last_submit_at > tc.utc_datetime(hours=-1): |
|
171 |
+ return '已上报' |
|
172 |
+ return '未上报' |
|
173 |
+ |
|
174 |
+ @property |
|
166 | 175 |
def data(self): |
167 | 176 |
return { |
168 | 177 |
'pk': self.pk, |
@@ -170,6 +179,8 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
170 | 179 |
'user_id': self.user_id, |
171 | 180 |
'fields': self.fields, |
172 | 181 |
'observed_days': self.observed_days, |
182 |
+ 'temperature_has_upload': self.temperature_has_upload, |
|
183 |
+ 'temperature': self.temperature, |
|
173 | 184 |
'last_submit_at': tc.local_string(utc_dt=self.last_submit_at, format='%m-%d %H:%M') if self.last_submit_at else '', |
174 | 185 |
'remark': self.remark, |
175 | 186 |
} |